package huanzhao.erp.domain.annotation;

import huanzhao.erp.domain.types.TaskType;
import huanzhao.erp.other.validator.TaskValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 检查当前任务是否属于自己
 * 任务类型是否为指定的任务类型之一
 * 是否需要检查任务是否可以完成
 *
 * @author April
 * 2024/10/8 19:45
 * @version 1.0
 */
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = TaskValidator.class)
@Documented
public @interface CheckTask {
    String message() default "任务不属于自己";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 检查任务类型必须为指定的任务类型其中一种
     *
     * @return TaskType[]
     * 2024/10/9 22:52:35
     */
    TaskType[] value() default {};

    /**
     * 是否需要检查任务是否可以完成
     * 若为true，任务必须为处理中且未被拒收
     *
     * @return boolean
     * 2024/10/9 21:09:45
     */
    boolean completable() default true;
}
